#include "pileChaineEntree.h"

void initPiles()
{
	pileBloc = NULL;
	pileEntree = NULL;
}

int pileChaineEntreeEstNull (pPileChaineEntreeNode chaine)
{
	return chaine == NULL;
}

pPileChaineEntreeNode nextPileChaineEntreeNode(pPileChaineEntreeNode node)
{
	if(pileChaineEntreeEstNull(node))
	{
		printf("Erreur : nextPileChaineEntreeNode : node null;\n");
		exit(-1);
	}
	return (pPileChaineEntreeNode)node->next;
}

pChaineEntreeNode valeurPileChaineEntreeNode(pPileChaineEntreeNode node)
{
	if(pileChaineEntreeEstNull(node))
	{
		printf("Erreur : valeurPileChaineEntreeNode : node null;\n");
		exit(-1);
	}
	return node->valeur;
}

pPileChaineEntreeNode nouveauPileChaineEntreeNode (pChaineEntreeNode valeur)
{
	pPileChaineEntreeNode node = malloc(sizeof(struct pileChaineEntreeNode));
	node->valeur = valeur;
	node->next = NULL;
	return node;
}

pPileChaineEntreeNode ajoutPileChaineEntreeNodeDebut(pChaineEntreeNode valeur, pPileChaineEntreeNode chaine)
{	
	pPileChaineEntreeNode nouveauNode = nouveauPileChaineEntreeNode(valeur);
	nouveauNode->next = chaine;
	return nouveauNode;
}

pPileChaineEntreeNode suppressionPileChaineEntreeDebut (pPileChaineEntreeNode chaine)
{
	if(pileChaineEntreeEstNull(chaine))
	{
		printf("Erreur : suppressionPileChaineEntreeDebut : chaine null.\n");
		exit(-1);
	}

	return chaine->next;
}

void affichePileChaineEntree (pPileChaineEntreeNode chaine)
{
	if(pileChaineEntreeEstNull(chaine))
	{
		printf("Chaine vide\n");
		return;
	}
	
	do
	{
		printf("(%s) ", entreeToString(valeurChaineEntreeNode(valeurPileChaineEntreeNode(chaine))));
		chaine = nextPileChaineEntreeNode(chaine);
	}	
	while(!pileChaineEntreeEstNull(chaine));
	printf("\n");
}
